package com.linedata.acq.metier.norme.fmb;

import oracle.forms.jdapi.Block;
import oracle.forms.jdapi.Canvas;
import oracle.forms.jdapi.FormModule;
import oracle.forms.jdapi.Graphics;
import oracle.forms.jdapi.Item;
import oracle.forms.jdapi.JdapiIterator;

public class GTIT_FMB {

	private FormModule	fmb;

	public GTIT_FMB(FormModule fmb) {
		this.fmb = fmb;
	}

	private String	error	= "";

	public String getError() {
		return error;
	}

	public void setError(String error) {
		this.error += error;
	}

	/**
	 * EKFR012_1 :: Le nom des titres de block est  « NOM_BLOCK »_TITRE
	 * 
	 * @param fmb
	 */
	public void nomTitreBlock() {

		for (JdapiIterator blocks = fmb.getBlocks(); blocks.hasNext();) {

			Block block = (Block) blocks.next();
			if (block.getName().toUpperCase().equals("TITRE_CTRL")) {

				for (JdapiIterator items = block.getItems(); items.hasNext();) {

					Item item = (Item) items.next();
					if (item.getName().toUpperCase().endsWith("_TITRE") && item.isSubclassed()
							&& item.getSubclassParent().getName().toUpperCase().equals("IESO$TITRE")) {

						boolean trouve = false;
						for (JdapiIterator blocksSearch = ((FormModule) fmb).getBlocks(); blocksSearch.hasNext();) {

							Block blockSearch = (Block) blocksSearch.next();
							if (blockSearch
									.getName()
									.toUpperCase()
									.equals(item.getName().substring(0, item.getName().toUpperCase().indexOf("_TITRE")))) {
								trouve = true;
							}
						}
						if (!trouve)
							this.setError("\tEKFR0012_1 : " + block.getName() + "\t:: " + item.getName() + "\n");
					}
				}
			}
		}
	}

	/**
	 * EKFR013_1 :: Le nom des titres des fenêtres est
	 *  « NOM_BLOCK »_TITRE_WIN
	 * 
	 * @param fmb
	 */
	public void nomTitreFenetre() {

		for (JdapiIterator blocks = fmb.getBlocks(); blocks.hasNext();) {

			Block block = (Block) blocks.next();
			if (block.getName().toUpperCase().equals("TITRE_CTRL")) {

				for (JdapiIterator items = block.getItems(); items.hasNext();) {

					Item item = (Item) items.next();
					if (item.getName().toUpperCase().endsWith("_TITRE_WIN") && item.isSubclassed()
							&& item.getSubclassParent().getName().toUpperCase().equals("IESO$TITRE")) {

						boolean trouve = false;
						for (JdapiIterator blocksSearch = ((FormModule) fmb).getBlocks(); blocksSearch.hasNext();) {

							Block blockSearch = (Block) blocksSearch.next();
							if (blockSearch
									.getName()
									.toUpperCase()
									.equals(item.getName().substring(0,
											item.getName().toUpperCase().indexOf("_TITRE_WIN")))) {
								trouve = true;
							}
						}
						if (!trouve)
							this.setError("\tEKFR0013_1 : " + block.getName() + "\t:: " + item.getName() + "\n");
					}
				}
			}
		}
	}

	/**
	 * EKFR014_1 :: Le nom des titres des onglets est  « NOM_BLOCK »_TAB
	 * 
	 * @param fmb
	 */
	public void nomTitreOnglet() {

		for (JdapiIterator blocks = fmb.getBlocks(); blocks.hasNext();) {

			Block block = (Block) blocks.next();
			if (block.getName().toUpperCase().equals("TITRE_CTRL")) {

				for (JdapiIterator items = block.getItems(); items.hasNext();) {

					Item item = (Item) items.next();
					if (item.getName().toUpperCase().endsWith("_TAB") && item.isSubclassed()
							&& item.getSubclassParent().getName().toUpperCase().equals("IESO$TITRE")) {

						boolean trouve = false;
						for (JdapiIterator blocksSearch = ((FormModule) fmb).getBlocks(); blocksSearch.hasNext();) {

							Block blockSearch = (Block) blocksSearch.next();
							if (blockSearch.getName().toUpperCase()
									.equals(item.getName().substring(0, item.getName().toUpperCase().indexOf("_TAB")))) {
								trouve = true;
							}
						}
						if (!trouve)
							this.setError("\tEKFR0014_1 : " + block.getName() + "\t:: " + item.getName() + "\n");
					}
				}
			}
		}
	}

	/**
	 * EKFR026_1 :: Les propriétés X/Y position du titre du block corespondent
	 * à X/Y position +5 de la frame
	 * 
	 * @param fmb
	 */
	public void PositionTitreBlock() {

		for (JdapiIterator blocks = fmb.getBlocks(); blocks.hasNext();) {

			Block block = (Block) blocks.next();
			if (block.getName().toUpperCase().equals("TITRE_CTRL")) {

				for (JdapiIterator items = block.getItems(); items.hasNext();) {

					Item item = (Item) items.next();
					if (item.getName().toUpperCase().endsWith("_TITRE") && item.isSubclassed()
							&& item.getSubclassParent().getName().toUpperCase().equals("IESO$TITRE")) {

						// System.out
						// .println(item.getName().toUpperCase()
						// .substring(
						// 0,
						// item.getName().toUpperCase()
						// .length() - 6));
					}

					for (JdapiIterator canvases = fmb.getCanvases(); canvases.hasNext();) {

						Canvas canvas = (Canvas) canvases.next();
						if (!canvas.getName().toUpperCase().equals("TOOLBAR")
								&& !canvas.getName().toUpperCase().equals("FOOTER")) {

							for (JdapiIterator graphicses = canvas.getGraphicses(); graphicses.hasNext();) {

								Graphics graphics = (Graphics) graphicses.next();

								if (graphics
										.getName()
										.toUpperCase()
										.equals("GRPH_"
												+ item.getName().toUpperCase()
														.substring(0, item.getName().toUpperCase().length() - 6))) {

									if (item.getYPosition() == graphics.getYPosition() + 5)

										this.setError("\tEKFR026_1 : " + canvas.getName() + "\t:: "
												+ graphics.getName() + "\t:: " + item.getName() + "\n");
								}
							}
						}
					}
				}
			}
		}
	}

	@Override
	public String toString() {
		return this.getError();
	}
}
